package com.wms.service.impl;

import com.wms.constant.Prefix;
import com.wms.mapper.GoodsBatchMapper;
import com.wms.service.GoodsBatchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;

@Service
public class GoodsBatchServiceImpl implements GoodsBatchService {
    //最大批次号
    private String maxBatch;
    @Autowired
    GoodsBatchMapper goodsBatchMapper;
    @Transactional
    @Override
    public int setGoodsBatch(List<Integer> dids) {
        //设置批次号
        int res=goodsBatchMapper.batchBindBatchNo(getNewBatch(),dids);
        return res;
    }

    String getNewBatch(){
        //获取系统的年月日(2025-8-16)
        String ymd=getYmd();
        //判断内存中是否存在最大编码（如果不存在就去数据库中获取当前年月日最大编码）
        if(null==maxBatch){
            goodsBatchMapper.getMaxBatch(ymd);
            if(null==maxBatch){
                //如果数据库也没有记录 说明是当前年份的第一笔记录 直接生成初始编码
                maxBatch= Prefix.CGPC+ymd+"0001";
                return maxBatch;
            }
        }
        //存在最大编码(CGPC202503010001)
        //判断当前的年月日是否是同一天
        String tmp=maxBatch.substring(4,12);
        if(!ymd.equals(tmp)){
            //如果不等说明是新的一天
            maxBatch= Prefix.CGPC+ymd+"001";
            return maxBatch;
        }
        //如果是同一天 只截取后半部分的序号
        String seq=maxBatch.substring(12);
        int c=Integer.parseInt(seq);
        c++;
        //新的批次号
        maxBatch=Prefix.CGPC+ymd+String.format("%04d",c);//进行补0操作
        return maxBatch;
    }

    /**
     * 获取系统年月日
     * @return
     */
    String getYmd(){
        LocalDate now=LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        return now.format(formatter);
    }

}
